package com.asambleacristiana.bean.reportes;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import net.sf.jasperreports.engine.JRDataSource;

import com.asambleacristiana.domain.Value;
import com.asambleacristiana.domain.Zona;
import com.asambleacristiana.reportes.AbstractBaseReportBean;

@ManagedBean
@RequestScoped
public class ReportesPorFechaBean extends AbstractBaseReportBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private final String COMPILE_FILE_NAME_MOVIMIENTOS_GENERALES_DEL_MES = "movimientos_generales_del_mes";
	private final String COMPILE_FILE_NAME_COMPROBANTES_DEL_MES = "comprobantes_del_mes";
	private String repoSelec = COMPILE_FILE_NAME_MOVIMIENTOS_GENERALES_DEL_MES;
	private Date fechaDesde;
	private Date fechaHasta;
	private List<Zona> zonasAsociadas = null;
	private Integer codZonaActual = null;
	private List<Value> listaReportes = null;

	@PostConstruct
	public void postContruct() {
		zonasAsociadas = getUsuarioLogueado().getZonaSeleccionada().getZonasAsociadas();
		listaReportes = new ArrayList<Value>();
		listaReportes.add(new Value(COMPILE_FILE_NAME_MOVIMIENTOS_GENERALES_DEL_MES, "Movimientos gerales"));
		listaReportes.add(new Value(COMPILE_FILE_NAME_COMPROBANTES_DEL_MES, "Comprobantes"));
	}

	public void setListaReportes(List<Value> listaReportes) {
		this.listaReportes = listaReportes;
	}

	public List<Value> getListaReportes() {
		return listaReportes;
	}

	@Override
	protected JRDataSource getJRDataSource() {
		return null;
	}

	@Override
	protected Map<String, Object> getReportParameters() {
		Map<String,Object> hs = super.getReportParameters();
		hs.put("fecha_desde", fechaDesde);
		hs.put("fecha_hasta", fechaHasta);
		hs.put("id_zona", codZonaActual);
		return hs;
	}

	@Override
	protected String getCompileFileName() {
		String COMPILE_FILE_NAME = "";
		if (COMPILE_FILE_NAME_MOVIMIENTOS_GENERALES_DEL_MES.equals(repoSelec)) {
			COMPILE_FILE_NAME = COMPILE_FILE_NAME_MOVIMIENTOS_GENERALES_DEL_MES;
		} else if (COMPILE_FILE_NAME_COMPROBANTES_DEL_MES.equals(repoSelec)) {
			COMPILE_FILE_NAME = COMPILE_FILE_NAME_COMPROBANTES_DEL_MES;
		}
		return COMPILE_FILE_NAME;
	}

	public void execute() {
		try {

			if (fechaDesde.compareTo(fechaHasta) > 0) {

				FacesContext.getCurrentInstance().addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_ERROR, "La fecha desde debe ser menor a la fecha hasta.",
								"La fecha desde debe ser menor a la fecha hasta."));

			} else {

				super.prepareReport();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public Date getFechaDesde() {
		return fechaDesde;
	}

	public void setFechaDesde(Date fechaDesde) {
		this.fechaDesde = fechaDesde;
	}

	public Date getFechaHasta() {
		return fechaHasta;
	}

	public void setFechaHasta(Date fechaHasta) {
		this.fechaHasta = fechaHasta;
	}

	public void setZonasAsociadas(List<Zona> zonasAsociadas) {
		this.zonasAsociadas = zonasAsociadas;
	}

	public List<Zona> getZonasAsociadas() {
		return zonasAsociadas;
	}

	public void setCodZonaActual(Integer codZonaActual) {
		this.codZonaActual = codZonaActual;
	}

	public Integer getCodZonaActual() {
		return codZonaActual;
	}

	public String getRepoSelec() {
		return repoSelec;
	}

	public void setRepoSelec(String repoSelec) {
		this.repoSelec = repoSelec;
	}

}
